using System;
using System.IO;
using System.Collections;

namespace Curriculum.Business
{
	/// <summary>
	/// Summary description for ListaDeVersiones.
	/// </summary>

	public class ListaDeVersiones
	{
		private static ListaDeVersiones instancia = null;

		private DirectoryInfo directorioDeTrabajo;
		private ArrayList numerosDeVersion;

		private ListaDeVersiones()
		{
			this.numerosDeVersion = new ArrayList();
			string dir = System.Configuration.ConfigurationSettings.AppSettings["pathDirectorioDeTrabajo"];
			this.directorioDeTrabajo= new DirectoryInfo(dir);

			this.CargarListaDeVersiones();
		}
	
		public static ListaDeVersiones GetInstancia()
		{
			if (instancia == null)
				instancia = new ListaDeVersiones();

			return instancia;
		}

		public ArrayList GetNumerosDeVersion()
		{
			this.numerosDeVersion.Sort();
			return this.numerosDeVersion;
		}

		public string GetNuevoNroVersion()
		{
			ArrayList nros = GetNumerosDeVersion();
			if (nros.Count == 1)
			{
				return "1";
			}
			else
			{
				string ultimoNro = Convert.ToString(nros[nros.Count - 2]);
				int siguienteNro = (int.Parse(ultimoNro) + 1);
				return siguienteNro.ToString();
			}

		}

		private void CargarListaDeVersiones()
		{
			foreach (DirectoryInfo dir in directorioDeTrabajo.GetDirectories())
			{
				if (dir.Name.IndexOf(Constants.DIRECTORIO_DE_VERSION)==0)
				{
					this.numerosDeVersion.Add(this.GetNumeroDeVersion(dir.Name));
				}
			}
		}
		private string GetNumeroDeVersion(string nombreDirectorio)
		{
			int longitud = (nombreDirectorio.Length - Constants.DIRECTORIO_DE_VERSION.Length);
			return nombreDirectorio.Substring(Constants.DIRECTORIO_DE_VERSION.Length, longitud);
		}

		public void Reset()
		{
			instancia = null;
		}
	}
}
